libpng FAQ - August 20, 1995 Maintainer: Guy Eric Schalnat: schalnat@group42.com CompuServe: 75501,1625 Contents: 1) General Questions 1.1) How official is this FAQ? 1.2) How often is this FAQ posted? 1.3) Where can I get this FAQ, libpng, zlib, the PNG specification, test images, etc.? 1.4) How ready is libpng? 1.5) How portable is libpng? 1.6) When will libpng be out of Beta? 1.7) What remains to be done in libpng for the 1.0 release? 1.8) Can I help? 1.9) Why don't you answer your mail? 2) Libpng questions 2.1) Does the order of functions calls matter? 2.2) When I try to read/write a png image, it doesn't work. 2.3) Do I have to start with example.c? 2.4) What things should I be careful of? 2.5) Why doesn't example.c compile? 3) Critical Patches No known bugs (for now :-). 4) Non-critical patches No known bugs (for now :-). Questions: 1) General Questions 1.1) How official is this FAQ? As it was written by the author of libpng (that's me :), it's about offical as one can get. However, it is not ready for prime time yet, as libpng is still in beta, and thus its users are of the sort that are willing to deal with beta software. Thus, I assume all of you reading this have a basic familiarity with PNG, libpng, and C programming. I'll write a basic section for libpng later, as well as some quick stuff on PNG itself (but this will not be the PNG FAQ. I just don't have that kind of time). 1.2) How often is this FAQ posted? As often as events warrant. I doubt it'll get stale, and as it is not (and may never be) actually posted to a newsgroup, I feel no need to make monthy postings. 1.3) Where can I get this FAQ, libpng, zlib, the PNG specification, test images, etc.? Everything should be at ftp://ftp.uu.net/graphics/png and mirror sites. On CompuServe, it should be at GO GRAPHSUPPORT in the Png Development library (lib 20). Failing that, try my ftp site at ftp://ftp.group42.com/pub/png or web site at http://www.group42.com/ If you have trouble getting to these, the numerical address is 204.94.158.25 1.4) How ready is libpng? In its current incarnation (0.8), it still may have a few bugs. I think I got all of the bugs this time, but one never knows. Also, the dithering currently in libpng is horrid, so that needs work. Finally, I have yet to implement medium model support. 1.5) How portable is libpng? As portable as I can make it. It needs int's of at least 16 bits, and longs of at least 32 bits. It has not been tried for char's larger then 8 bits. It should support any reasonable K&R C compiler, as well as any ANSI C compiler. The most you should need to do is change the includes in pngconf.h. So far, I know of no compiler in use that libpng will not compile on. 1.6) When will libpng be out of Beta? That depends on my workload here. I'm writing libpng for free, which generates tons of good will, but doesn't help put food on the table, so there are times I just can't do any real work on it. There is still some work to be done (see question 1.7), so don't expect the official version before September (and that may be pushing it). I'll try to get the next (last?) beta version out my early September. Be warned, I always seem to take twice as long as I think I will. 1.7) What remains to be done in libpng for the 1.0 release? Add Tim Wegner's medium memory model support. (Thanks, Tim). Improve the dithering. Rewrite libpng.txt, and comment the code better. Test with a final zlib. 1.8) Can I help? Sweet words. The most helpful thing you can do for the 1.0 release is help testing on your compiler. After this release, though, there is a large list of things that ought to be done to make libpng be more full featured. We'll talk about this later, as I don't want to add tons of new code until after 1.0 gets out the door. Please send me any makefile changes and/or other changes needed to support your compiler (with a #ifdef for the code changes). If any of you are good at technical writing, take a look at libpng.txt and correct it (or rewrite it) as necessary. I am not a writer, I'm a programmer. It shows. 1.9) Why don't you answer your mail? I've been busy. I'm sorry about that, and I've got to get into the habit of at least replying that I got the message. Also, some of you have sent me problems that I haven't gotten back to you yet. If it is still a problem, you may want to give me a short message and remind me that I need to look into it. Libpng is being tested by more people than I dared hope (which is a good thing), and I was unprepared to deal with so many problems so soon. 2) Libpng questions 2.1) Does the order of functions calls matter? In general, yes. If you stick with the order I used in libpng.txt and example.c, you should be safe. Be warned, however, that I messed up the order of png_set_interlace_handling(). It needs to be called *before* png_start_read_image(), not after. Oops. The exceptions to this rule are all the png_set ... calls. They can be done in any order, but they all have to be done in the area indicated by libpng.txt/example.c. 2.2) When I try to read/write a png image, it doesn't work. Does zlib's test program work (example.c)? Does libpng's test program work (testpng.c)? Have you installed the patches at the end of this FAQ? After all that, if the problem continues, e-mail me, and we'll try to fix it. If you don't have much programming experience, be patient about the fix. Code fragments help, as do *small* images (uuencoded please). If I don't get back to you right away, give me some time. Thanks. 2.3) Do I have to start with example.c? No, but most people have had much better luck doing that. Seems I didn't explain things well in libpng.txt, so things are not intuitive to people (which could be an api design problem also). Sometime in the future, we'll revisit the api design, and try to make it easier to use. I'll rewrite libpng.txt before the 1.0 release. 2.4) What things should I be careful of? The main gotcha is calling png_read_init() before png_info_init(). Also, always make sure you have a correct setjmp buffer. That's all I can think of for now. 2.5) Why doesn't example.c compile? I wrote example.c as a staring point for using libpng. It doesn't compile because I don't know how you want to do things like allocating memory to hold the image, so I left that code out. If you go in and finish it up, it should work fine. The file pngtest.c gives a very simple example of reading and writing png files. 3) Critical Patches No known bugs (for now :-). 4) Non-critical patches No known bugs (for now :-). That's it so far as I know. If I missed something, yell. -Guy